How To Build GNU less for ARM


Intro


In this How To we are going to build less 451 with our GCC/G++ 4.8.2 cross-compiler. Be sure to start this build in a new terminal/tab to avoid any pollution from previous builds. This came about due to BusyBox's limited functionality with its less "applet", specifically this command: less -isM. If you are using BusyBox and its less applet you'll need to disable before being able to use the _real_ less program. You do that during compile time in the config menu.

Tar Balls


Here is a list of source packages that we'll need for the build. You can either download them now or wait 'til later in the How To.
  • less-451.tar.gz

You'll also need Ncurses for this build.

Create a Workspace


I recommend creating a workspace under your /home/<your user>/ directory that is dedicated to this build. So let's fire up your terminal and run the following:
$ export LESS_SRC=~/workbench/less/src
$ export LESS_BUILD=~/workbench/less/build
$ mkdir -pv ~/workbench/less
$ mkdir $LESS_SRC && mkdir $LESS_BUILD
$ cd $LESS_SRC
Now that we have a workspace created and we are currently in the src directory we can begin bringing down the sources and extracting them.

less

$ wget ftp://ftp.gnu.org/gnu/less/less-451.tar.gz
$ tar -pxzf less-451.tar.gz

Build Environment


To make things a little smoother let's setup some environment variables:
$ export INSTALLDIR=~/workbench/gcc-g++-4.8.2/arm
$ export PATH=$INSTALLDIR/bin:$PATH
$ export TARGETMACH=arm-none-linux-gnueabi
$ export BUILDMACH=i686-pc-linux-gnu
$ export CROSS=arm-none-linux-gnueabi
$ export CC=${CROSS}-gcc
$ export LD=${CROSS}-ld
$ export AS=${CROSS}-as
$ export CXX=${CROSS}-g++
NOTE: Depending on whether you are using a cross-compiler built from my other wikis you might need to change INSTALLDIR to point to your cross-compiler.

Build less


$ cd ../build/
$ ../src/less-451/./configure --prefix=/home/<your user>/workbench/less/final --host=$TARGETMACH CPPFLAGS=-I/home/<your user>/workbench/ncurses/final/include LDFLAGS=-L/home/<your user>/workbench/ncurses/final/lib
$ make
$ make install

Output


cd into the final directory and output its contents:
$ cd ../final/
$ ls
You should have the following directories:
  • bin
  • share

Make sure the binaries are for ARM:
$ cd bin/
$ file less
bash: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, not stripped
If you see something similar to above you're good to go ;-)

Lastly, move the contents of these directories, or the directories themselves if they do not already exist, to your custom Linux file system or dev board.